{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "HykKFEeAoXan"
   },
   "source": [
    "# Burgers Optimization with a PINN\n",
    "\n",
    "To illustrate how the physics-informed losses work for variant 2, let's consider a reconstruction task\n",
    "as an inverse problem example.\n",
    "We'll use Burgers equation $\\frac{\\partial u}{\\partial{t}} + u \\nabla u = \\nu \\nabla \\cdot \\nabla u$ as a simple yet non-linear equation in 1D, for which we have a series of _observations_ at time $t=0.5$. \n",
    "The solution should fulfill the residual formulation for Burgers equation and match the observations.\n",
    "In addition, let's impose Dirichlet boundary conditions $u=0$\n",
    "at the sides of our computational domain, and define the solution in\n",
    "the time interval $t \\in [0,1]$.\n",
    "\n",
    "Note that similar to the previous forward simulation example, \n",
    "we will still be sampling the solution with 128 points ($n=128$), but now we have a discretization via the NN. So we could also sample points in between without having to explicitly choose a basis function for interpolation. The discretization via the NN now internally determines how to use its degrees of freedom to arrange the activation functions as basis functions. So we have no direct control over the reconstruction.\n",
    "[[run in colab]](https://colab.research.google.com/github/tum-pbs/pbdl-book/blob/main/physicalloss-code.ipynb)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "g9TYIr2loXar"
   },
   "source": [
    "## Formulation\n",
    "\n",
    "In terms of the $x,y^*$ notation from {doc}`overview-equations` and the previous section, this reconstruction problem means we are solving\n",
    "\n",
    "$$\n",
    "\\text{arg min}_{\\theta} \\sum_i \\big( f(x_i ; \\theta)-y^*_i \\big)^2 + R(x_i) ,\n",
    "$$\n",
    "\n",
    "where now $x_i$ denotes a space-time point $x_i=[p_i,t_i]$, the reference solutions are $y^*_i = y^*(x_i)$, and the index $i$ indicates different sampling points for our data set.\n",
    "Both $f$ and $y^*$ represent the solution of $u$ at different locations in space and time, and\n",
    "as we're dealing with a 1D velocity, $f, y^*: \\mathbb{R}^2 \\rightarrow \\mathbb{R}$.\n",
    "In this example, $y^*$ denotes a reference $u$ for $\\mathcal{P}$ being Burgers equation, which $f$ should approximate as closely as possible at all chosen space-time points $x_i=[p_i,t_i]$. \n",
    "\n",
    "While the first term above is the \"supervised\" data term, the second one denotes the residual function $R$. It collects additional evaluations of $f(;\\theta)$ and its derivatives to formulate the residual for $\\mathcal{P}$. This approach -- using derivatives of a neural network to compute a PDE residual -- is typically called a _physics-informed_ approach, yielding a _physics-informed neural network_ (PINN) {cite}`raissi2019pinn` to represent a solution for the inverse reconstruction problem.\n",
    "\n",
    "Thus, in the formulation above, $R$ should simply converge to zero above. We've omitted scaling factors in the objective function for simplicity. Note that, effectively, we're only dealing with individual point samples of a single solution $u$ for $\\mathcal{P}$ here.\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "3mh1Lf_XoXas"
   },
   "source": [
    "## Preliminaries\n",
    "\n",
    "This notebook is a bit older, and hence requires an older tensorflow version. The next cell installs/downgrades TF to a compatible version. This can lead to \"errors\" on colab due to pip dependencies, which you can safely ignore:\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "!pip3 install --upgrade --quiet tensorflow==2.15.0 tensorflow-probability==0.23.0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we'll load phiflow (using a legacy version 1.5.1 from a custom repository) below. We'll use it with the tensorflow backend and initialize the random sampling. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "L30jgXowoXat",
    "outputId": "bcceefc0-fb33-44c7-959c-0b742e5a1606"
   },
   "outputs": [],
   "source": [
    "!pip install --upgrade --quiet git+https://github.com/thunil/PhiFlow.git\n",
    "\n",
    "from phi.tf.flow import *\n",
    "import numpy as np\n",
    "\n",
    "#rnd = TF_BACKEND  # for phiflow: sample different points in the domain each iteration\n",
    "rnd = math.choose_backend(1)  # use same random points for all iterations"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "JvVRcVfUoXat"
   },
   "source": [
    "We're importing phiflow here, but we won't use it to compute a solution to the PDE as in {doc}`overview-burgers-forw`. Instead, we'll use the  derivatives of an NN (as explained in the previous section) to set up a loss formulation for training.\n",
    "\n",
    "Next, we set up a simple NN with 8 fully connected layers and `tanh` activations with 20 units each. \n",
    "\n",
    "We'll also define the `boundary_tx` function which gives an array of constraints for the solution (all for $t=0.5$ in this example), and the `open_boundary` function which stores constraints for $x= \\pm1$ being 0."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "id": "AwWNtbm_oXau"
   },
   "outputs": [],
   "source": [
    "def network(x, t):\n",
    "    \"\"\" Dense neural network with 8 hidden layers and 3021 parameters in total.\n",
    "        Parameters will only be allocated once (auto reuse).\n",
    "    \"\"\"\n",
    "    y = math.stack([x, t], axis=-1)\n",
    "    for i in range(8):\n",
    "        y = tf.layers.dense(y, 20, activation=tf.math.tanh, name='layer%d' % i, reuse=tf.AUTO_REUSE)\n",
    "    return tf.layers.dense(y, 1, activation=None, name='layer_out', reuse=tf.AUTO_REUSE)\n",
    "\n",
    "def boundary_tx(N):\n",
    "    x = np.linspace(-1,1,128)\n",
    "    # precomputed solution from forward simulation:\n",
    "    u = np.asarray( [0.008612174447657694, 0.02584669669548606, 0.043136357266407785, 0.060491074685516746, 0.07793926183951633, 0.0954779141740818, 0.11311894389663882, 0.1308497114054023, 0.14867023658641343, 0.1665634396808965, 0.18452263429574314, 0.20253084411376132, 0.22057828799835133, 0.23865132431365316, 0.25673879161339097, 0.27483167307082423, 0.2929182325574904, 0.3109944766354339, 0.3290477753208284, 0.34707880794585116, 0.36507311960102307, 0.38303584302507954, 0.40094962955534186, 0.4188235294008765, 0.4366357052408043, 0.45439856841363885, 0.4720845505219581, 0.4897081943759776, 0.5072391070000235, 0.5247011051514834, 0.542067187709797, 0.5593576751669057, 0.5765465453632126, 0.5936507311857876, 0.6106452944663003, 0.6275435911624945, 0.6443221318186165, 0.6609900633731869, 0.67752574922899, 0.6939334022562877, 0.7101938106059631, 0.7263049537163667, 0.7422506131457406, 0.7580207366534812, 0.7736033721649875, 0.7889776974379873, 0.8041371279965555, 0.8190465276590387, 0.8337064887158392, 0.8480617965162781, 0.8621229412131242, 0.8758057344502199, 0.8891341984763013, 0.9019806505391214, 0.9143881632159129, 0.9261597966464793, 0.9373647624856912, 0.9476871303793314, 0.9572273019669029, 0.9654367940878237, 0.9724097482283165, 0.9767381835635638, 0.9669484658390122, 0.659083299684951, -0.659083180712816, -0.9669485121167052, -0.9767382069792288, -0.9724097635533602, -0.9654367970450167, -0.9572273263645859, -0.9476871280825523, -0.9373647681120841, -0.9261598056102645, -0.9143881718456056, -0.9019807055316369, -0.8891341634240081, -0.8758057205293912, -0.8621229450911845, -0.8480618138204272, -0.833706571569058, -0.8190466131476127, -0.8041372124868691, -0.7889777195422356, -0.7736033858767385, -0.758020740007683, -0.7422507481169578, -0.7263049162371344, -0.7101938950789042, -0.6939334061553678, -0.677525822052029, -0.6609901538934517, -0.6443222327338847, -0.6275436932970322, -0.6106454472814152, -0.5936507836778451, -0.5765466491708988, -0.5593578078967361, -0.5420672759411125, -0.5247011730988912, -0.5072391580614087, -0.4897082914472909, -0.47208460952428394, -0.4543985995006753, -0.4366355580500639, -0.41882350871539187, -0.40094955631843376, -0.38303594105786365, -0.36507302109186685, -0.3470786936847069, -0.3290476440540586, -0.31099441589505206, -0.2929180880304103, -0.27483158663081614, -0.2567388003912687, -0.2386513127155433, -0.22057831776499126, -0.20253089403524566, -0.18452269630486776, -0.1665634500729787, -0.14867027528284874, -0.13084990929476334, -0.1131191325854089, -0.09547794429803691, -0.07793928430794522, -0.06049114408297565, -0.0431364527809777, -0.025846763281087953, -0.00861212501518312] );\n",
    "    t = np.asarray(rnd.ones_like(x)) * 0.5\n",
    "    perm = np.random.permutation(128) \n",
    "    return (x[perm])[0:N], (t[perm])[0:N], (u[perm])[0:N]\n",
    "\n",
    "def _ALT_t0(N): # alternative, impose original initial state at t=0\n",
    "    x = rnd.random_uniform([N], -1, 1)\n",
    "    t = rnd.zeros_like(x)\n",
    "    u = - math.sin(np.pi * x)\n",
    "    return x, t, u\n",
    "\n",
    "def open_boundary(N):\n",
    "    t = rnd.random_uniform([N], 0, 1)\n",
    "    x = math.concat([math.zeros([N//2]) + 1, math.zeros([N//2]) - 1], axis=0)\n",
    "    u = math.zeros([N])\n",
    "    return x, t, u\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "4qpLH7XEoXaw"
   },
   "source": [
    "Most importantly, we can now also construct the residual loss function `f` that we'd like to minimize in order to guide the NN to retrieve a solution for our model equation. As can be seen in the equation at the top, we need derivatives w.r.t. $t$, $x$ and a second derivative for $x$. The first three lines of `f` below do just that.\n",
    "\n",
    "Afterwards, we simply combine the derivates to form Burgers equation. Here we make use of phiflow's `gradient` function:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "id": "E2LrmmT4oXaw"
   },
   "outputs": [],
   "source": [
    "def f(u, x, t):\n",
    "    \"\"\" Physics-based loss function with Burgers equation \"\"\"\n",
    "    u_t = gradients(u, t)\n",
    "    u_x = gradients(u, x)\n",
    "    u_xx = gradients(u_x, x)\n",
    "    return u_t + u*u_x - (0.01 / np.pi) * u_xx\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "TWR6OvKboXax"
   },
   "source": [
    "Next, let's set up the sampling points in the inner domain, such that we can compare the solution with the previous forward simulation in phiflow. \n",
    "\n",
    "The next cell allocates two tensors: `grid_x` will cover the size of our domain, i.e., the -1 to 1 range, with 128 cells, while `grid_t` will sample the time interval $[0,1]$ with 33 time stamps.\n",
    "\n",
    "The last `math.expand_dims()` call simply adds another `batch` dimension, so that the resulting tensor is compatible with the following examples.\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "xxLRbUQzoXay",
    "outputId": "a2504aae-26dc-48a3-a5fa-12c6539f3f62"
   },
   "outputs": [],
   "source": [
    "N=128\n",
    "grids_xt = np.meshgrid(np.linspace(-1, 1, N), np.linspace(0, 1, 33), indexing='ij')\n",
    "grid_x, grid_t = [tf.convert_to_tensor(t, tf.float32) for t in grids_xt]\n",
    "\n",
    "# create 4D tensor with batch and channel dimensions in addition to space and time\n",
    "# in this case gives shape=(1, N, 33, 1)\n",
    "grid_u = math.expand_dims(network(grid_x, grid_t))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "3iPGedVcoXaz"
   },
   "source": [
    "Now, `grid_u` contains a full graph to evaluate our NN at $128 \\times 33$ positions, and returns the results in a $[1,128,33,1]$ array once we run it through `session.run`. Let's give this a try: we can initialize a TF session, evaluate `grid_u` and show it in an image, just like the phiflow solution we computed previously. \n",
    "\n",
    "(Note, we'll use the `show_state` as in {doc}`overview-burgers-forw`. Hence, the x axis does not show actual simulation time, but is showing 32 steps \"blown\" up by a factor of 16 to make the changes over time easier to see in the image.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 356
    },
    "id": "MHYmnuiEoXaz",
    "outputId": "7f48e8b7-97f3-442c-bf67-e1deb3aff6ea",
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Size of grid_u: (1, 128, 33, 1)\n",
      "Randomly initialized network state:\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1oAAAEhCAYAAABm2NG1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAABPn0lEQVR4nO29fbSsd1Xn+dnnJuEtSCDBEJJoWBK6G2lFiYBN66QhTkcajasbIy8LEwyTYSlK94gSpEcQxQmtLdLCQN8B2oBoiLQOGUWQtwzttCAJorxJEyDADYEQIBDI66lnzx/PUzcnl3vPy737e6r2Od/PXWfdqjp19vnVU8+p+n1r7/3dkZkYY4wxxhhjjKljZdELMMYYY4wxxpidhoWWMcYYY4wxxhRjoWWMMcYYY4wxxVhoGWOMMcYYY0wxFlrGGGOMMcYYU4yFljHGGGOMMcYUc9SiF2CMMcYYY4wx//Ls78kv3/CNLf/cVVd9+m2ZebZgSUeEhZYxxhhjjDFm4dxww028929+bcs/d8ye804QLOeIsdAyxhhjjDHGLAFJ5uqiF1GGhZYxxhhjjDFm8SRkzha9ijIstIwxxhhjjDELJ0kGZ7SMMcYYY4wxphKXDhpjjDHGGGNMMTtLaHmOljHGGGOMMcYU44yWMcYYY4wxZvFkksPOyWhZaBljjDHGGGOWgx1UOmihZYwxxhhjjFkCdlaPloWWMcYYY4wxZglIGO5Y9CLKsNAyxhhjjDHGLJxMZ7SMMcYYY4wxppgEm2EYY4wxxhhjTCFpoWWMMcYYY4wx9bh00BhjjDHGGGPqCJJwRssYY4wxxhhjCnHpoDHGGGOMMcZUY6FljDHGGGOMMcUk4R4tY4wxxhhjjCkkgWG26FWUYaFljDHGGGOMWQJshmGMMcYYY4wxxaQzWsYYY4wxxhhTyg5zHVxZ9AKMMcYYY4wxZqfhjJYxxhhjjDFmKQiXDhpjjDHGGGNMIekeLWOMMcYYY4wpxxktY4wxxhhjjCnFGS1jjDHGGGOMKSUyndEyxhhjjDHGmHIstIwxxhhjjDGmEGe0jDHGGGOMMUbADhJaHlhsjDHGGGOMWQKSGIYtf21ERJwdER+PiKsj4qKDfP+HI+IDEbEaEU+sejQWWsYYs4OIiFdFxP9ecd+I+JWIePUmY/1+RPzGdPmHIuLjm1vx5omIjIgHV8c1xhizJCRjRmurX+sQEXuAVwA/CjwUeHJEPPSAu30WOB/4w8qHY6FljDFLxMHERES8MCL+YDM/n5nPzMxf3+p9I+LMiNh3wPd/MzOfsdm1r/m5/5aZ/2irP3ckRMQVEXFrRJy65razIuKaNdeviYjrI+Jea257RkRcsZ1rNcYYcyiyXGgBjwSuzsxPZebtwKXAOXf5rZnXZObfAxunx7aAhZYxxpidwjeBjbJ5e4Bnb8NajDHGHAaRw5a/NuBk4HNrru+bbpNjoWWMMY2YZ54i4hen7Mx1EfH0Nd9fW8K3qftOGZ6/AB4YEd+Yvh54YCYtIv44Ir4QEV+LiPdExHevt8bp8k+tifmNiLhtnkGKiLtFxG9HxGcj4otTKeM91sT5pWnNn4+In9nE4flPjCUh37XOfX4LeE5EHLeJeMYYY7aTPOyM1gkRceWarwsX/VDAQssYYzryAOA+jJ/IXQC8IiLue7j3zcxvMtaufz4zj52+Pn+QWH8BnA58O/AB4A0bLTQz3ziPCTwQ+BTwR9O3LwYeAjwcePC0xl+FsXEZeA7wI9PvPGuj3wVcC/xfwK+tc58rgSum2MYYY5aNYdj6F9yQmWes+dq7JuK1wKlrrp8y3SbHQssYY/pxB/CizLwjM98CfAM4VE/UVu67Lpn52sy8KTNvA14IfG9E3GczPxsRK4xNxldk5n+OiAAuBP5dZn4lM28CfhN40vQj5wL/JTM/PAnBF25ymf8H8GOHyrZN/Crw8xFx/03GNMYYsx1kHq7QWo/3A6dHxIMi4hjG95nL5Y8FCy1jjFk2ZsDRB9x2NKNgmvPlzFxdc/1m4NhDxNvKfQ9JROyJiIsj4pMR8XXgmulbJ2wyxIuBewO/MF2/P3BP4KqIuDEibgTeOt0OY/ZrbU39ZzbzSzLzS8DLgRetc58PA38GfIvFrzHGmMUSw2zLX+sxvQc+C3gb8DHgssz8SES8KCJ+HCAifmAqef9J4D9HxEcqHosHFhtjzHLxWeA0xjeDOQ8C/of49+YG338Ko0vTWYwi6z7AV4HYKHBEPAl4MvADmTkXjDcAtwDfnZkHK+G4jruWenzHRr9nDb/FWKL4N+vc5wWM5Y//cQtxjTHGNGSq6HjLAbf96prL72csKSzFGS1jjFku3gj8+4g4JSJWIuIs4MeAN4l/7xeB49cpBbw3cBvwZcZM1G9uJmhEfB/we8BPTNkmADJzYOynemlEfPt035Mj4l9Od7kMOD8iHhoR92QURpsiM29kFFC/vM59rmY81r9wqPsYY4zZbiSlgwvDQssYY5aLFwH/HfgrxozRfwCeOpW7ycjMf2A0qfjUVMr3wAPu8jrG8r1rgY8C791k6HOA+wJ/tcZ58C+m7z0XuBp471SO+A6m/rHM/Avgd4F3Tfd51xYf0ssYyzDX40XAvTa4jzHGmO0i2VFCKzI3qhYxxhhjjDHGGC2PeMgx+b7fe8CWf+7osz93VWaeIVjSEeEeLWOMMcYYY8ziSeZzsXYES1c6GBFnR8THI+LqiLAjlDHGGGOMMbuAIIlh2PLXsrJUGa2I2AO8gnFA5T7g/RFxeWZ+dLErM8YYY4wxxshZYuG0VZZKaAGPBK7OzE8BRMSljI3UFlrGGGOMMcbsZOZmGDuEZRNaJ3PXAZX7gEcd6s4nnHDvPO20+x/q24dFMpBZXxuawypk9YmTxLA6TtEujyuojx1mgrUCs9WN77NVMmFQrFVkPjPbcJTRlskMGARxh5WNJzZtNSZBCtZKxngcihkExwBgSNGxVRyDDMUhGI9BMZkwbDwu7LDiao6BYK1oXhITwXmQoNimJZq3sPG41gfWHQPFWhPJMYgkBXFTcHSToXyts+E2hrxD8OaoJC20FklEXAhcCPAd33E873v/r5fGnw23cfvtN5TGBBhu/RLMbi2Pu3LT5+tj3nEzKzd/vT7uzV8nVotF0TAjvv612pgAd9wON9c/X9wykLfXh519/e7lMXN1D7Ob6+Ou3nx3hln9Zvi2b9yzPOawehS333ZMedzbbr3bKLYKyQxuuVXwfA17uPWOo8vj3nrH0cwEouim2+9WHnOWwa2zPeVxb1k9iplAFH1ztf64rmZwm+Dv9tbZGLuabwo+f5sl3C5Qm7fOUvIZ3M2z+g9MV3Pg9g2nJmyd27iD1aiPe0vcXB5zxip3xG3lcW/PW5hxx8Z33AJfueXvS+NtC6pPdRbEsgmta4FT11w/ZbptP5m5F9gL8IgzHpRD1r6aDrk6Zp+qyVUQxJVknlQMg85JpjxbiOQPPQckWSIAijfupChLBPVrBVH2TZPNSUGmbMiQZDIGVVZPtF6ozzoonq85is9tJdk3dGtVbanKaz1EhQ4KhumPYJAd3T4osk+D5K/B7McZLRnvB06PiAcxCqwnAU/ZzgVksXCTMl9r9ZqHmUTAhWqoXAriDoNqV6HZsA0r5aJoLPFTlGGpxItorQoBJxIZXUTh2tj1MeuFxoDs5aCc+TGtFgSjMK6NOcZVlSRqUJUODrJyvFqSlIiMYfpXjUpkaeLOGMqzhR2FtksHZWTmakQ8C3gbsAd4bWZ+ZJ2fkPRTlQsXGLNZxXFjilktimKYaTJPw0zzx6MQcEOK3lGR7K5yCKjetA4ikaGK2yiboxAvmUEKMhlDhiRDMssVSdxB0FOm+3AgmAn+FhRlaKp+Mk1njka8qQS3LFsoEW8aATf2UvXIPA2hEQGKx98Slw5qycy3AG/Z5J2pLh3MYVWT1RpWR2FUjMy0QlTip1mvSLwpUJTiTSIrq3t+RIKIYUWzaRUZd3QScKosmS6jpYjZp8xRmSWrXu9An72P7HMy0eMfMiUGEwoTiGGybOiERGwpPuQHsrgNotcztQZFO8iCWDqhtWhkpYO5qssSFRPDTDP8rUs2C6ZajvqwCie/HFbKRRZoSvHGuPWicG3s+piqtWpKHRWoBFwn8SLJ5mSIMhk9MsagKx2E+nMhyT5ic9EL2CKq0kFNOaJGZNWXDXalUTPkJmgttEab0eKMlsi0AuiT0QKRKFT1Uik+uhT2aFWLjEFjw46iHBGtwUT1BjMzGATHdhhWNHFl2bfysJISP9D1qWmOra5PTYEkA4mwzK+8T02VJWrUA0gfu/R5iZ+i1E9V5ufyQVw6uFykxiFwqLXXBI3IkpX4ibJEoejREma0JJlrhShSGTYMwSCwtFYZTMwEax1mojLHVMUVicImphUgEpvoNsJdNtjjWkViszyqssyvPmZmtjHDUGWeQCOIJDFVImsHlcsdMRZay0LWZ7QEphVAq74nXZZMWOZXHhORacWKJkukKG9TlcyJ+p5Al81Q0KVHC5CZbChiqrYqOlOU8rCic0v0UitzHRRkXYQljjtnW3l46FwHe5X5lfd+qU5as2maCy0Boh6tGBrN0VL1aIHQZEIh4OpDgsa0QTZDqok7IFM5Yhe3uWFQzpCqNkHQWdHXl3r2EtugyRKNcWtRuQMqUJYjdjkGIDTDiE5HoR6XDWrJ3FFeGM2FVgoyWqoeLdFsKo3AEJYkSgYLC/q0MnV9TwrjCpHQUq01m5QkKuddtbKNl5Tj1WdzBnTmErJyvEb9Sap5V11mXsnmXaXGyU9jLqF5toZQzabSOA5abIlx6eCyoOrREjoPFtNqsHAnh0DVYGFRf5KkzK+RGACNyYayl0pRjjcTnAeqOVqKuLJzC51phao/qTqurGxOJeA0xrG6OVqiA9xHwOliqoYLl8cUWca3QzVYbkE0F1rUixdZj5ZIZCn7qRQxu5T4dRosPI9bHnOlV5mjqMSv01wmqBcESge7Lnb04/NVGnKMKxKwsgyRKKZqNnw1ilI8FSmad5VoBguDRmwp1qrMOmWx2Op0zt4FC60dzHCHzIa9jRW7ap2qskHFoEfVH7lo5hWIxJbKcU9Q4tepN6fTepX27l1mSMncAVNlClIecurVq4+rQFaSmUgGCw8iy/R57A6k0s2wSabIZYNr6HHaborWQisFroOywcLCgcXlxhXDoOsnK1+rrj4kVwV9RKKZVzkTlIzNVIOQ60XGKAbqZ1NlhsQ2PkUGEwpRpFqrssxPMU9NV5JYHlYjjJWug4KYUP9pvqqiaezREsRtZO/eSWQNzGRW7BZbQIpMwxZEa6E1FmGL+qmKUWW0xn6qant3ZY9WdXeybrCwBNnMK0GWTGTDngLHvZwGALcxgpBltDRlcxozDFU2p1NGS2WyIRKF5VHn56wgripDpKigELkDSuJGSmZTjbEFZX6NBFF12WBrdpDe7C20SMqHCw+rmuHCIMtoSWI26tFqM1gYjSCaz9BSiaLymBmyTFk1XfqoQNf3lSIzDOjzGYlq3tU8tgKF66CC0TJd4eRXHlJmWAG6Ej9VpqiaLusEbdZpKN/QNK3Bc0ZrBzPoSvyqiWaCSFd7Uh8yU2NaMc57KhYZ8xlSTfqedNmcPuVtClGkcjJUztHqch6oUJlAyERRo5JEiZujNG4fd0CVKFIMF1YNFlbgssEJlw4uEZn1DoGiOVqS0sFh0AwWbmfvXh+SQeXkF+SqaI5WcZZI1k8mKElUuQ5mBjNR9m0QxNUIIlXPj242VXnM1JTjKUoSFdbuoCsdVDA/X6szUCmbdyXqpRIMFpY5DgrKBmV9X8xkBhsKsdkPzd5jUfQWWtT3aMWwKjKCqM8+qezdY5jpbPckH4k2GiwsmXe1IumnyhRk3+Zx2wwW1jhEavqIhNk3kcjoktFSZYlSYBs/moHUxgRl5ilFQr6LLBzRiYI+9uad1iqZzSWzO25Io8qEjWgutNj1ZhiALvtUHlPkEEif/iSGoHq4sCybIzLDgEYb7EFTjqfoe1L1UnUq8ZsL2HLxIppNpSpFQxBXWY7YJrOJzgxjNw8WBk0mRyayLIi0uHRwiVCUDg6z+phrY5fHVFimC0sHFW9SuVL+rprDiuQTlRwE2ZwppiSjpTLDaLJx12XKVBb3pSHvjC2KWd6nhmbjrnNI1PUnKTJlKit6lYirnnk1pMjJr1HWBXqtt1OPFtSLuL4DizXVJIugtdAKstwhUFU6GKt3yISWoverVUZrVfDJh2iGFIJhveTcDKNHpmyYrZSX5A0KkxGEZhgCgwmFtTvAaops/gVZonnfV/2HDiKRgar/rV68CAsSyhnLEXtZC3QZLDyEbo5Wp8HCCit292dNpHu0joiIOBV4HXAi4/vM3sx8WUTcD3gjcBpwDXBuZn51u9eHqO8JkBhXyAYLK1ANo0Fjm64xgqh3M8xhRWMwobQLFxxbSUxpRqs2psrNcR5bEVN1bKsZ0Bh3zGOXx+zkOojKca8e2cBi1cyrVqWDLvMDOw/O6eQeuxGLyGitAr+YmR+IiHsDV0XE24HzgXdm5sURcRFwEfDc9UOlzgyimiYGG2NcwWBh0JQNDpPIEpXjVTPG7TFDCtFaoU+PVid79/2xy3u/SsPdGZc+vTkqVKYVKtdBBaryyTF2cemgqJeqG6qBxdXISidzJhpY3OO4bgsuHTx8MvM64Lrp8k0R8THgZOAc4MzpbpcAV7CR0Erqhwsr52h1KfFLnQ17+evIwGQwUbxpHerL24D9ZX6lIVWiUFYypitFK48pmyGFxGRjVXDOqrI5unlq5SFH8SJaq0psKWIqsi6amL1cB0cBJ8g+CQRRO/HS6qMXA9P7o0sHa4iI04DvA94HnDiJMIAvMJYWbkB9RkvlDhgCUaSICegyWpKhMYziRZDRks2Qqo47LxtsMrB4NtMILVV5W6eMlsasQNWnpspoKQS3bq1dXAelphXF8UbTinpUZhiSssHQiDfQ9RJ1Ma5IBokV+9j7VR23zwcOO5WFCa2IOBb4r8C/zcyvR9z55piZGXHwSXsRcSFwIcCpD7wH5fbuQsdB2XBhRUxB3JQIrZAM61WIN5g+FW/UT6b6VKlLb47MIVE08wrqhYawtVIkYstDTsJYEVdUpV0fcowrOwY9hgCnKPMESIYLK+jWowW0Mdkwc2yGccRExNGMIusNmfkn081fjIiTMvO6iDgJuP5gP5uZe4G9AN//T+9b/soU0r4nwR97q8HCaP54FD1PwwrV8672x24yWFdpw64SLwoUGRJVXM/RmmIXx01R35MC2cDi+pCALlvYiQGNk183e/dqspGT4ZzyjFaXF64DsBnGERBj6uo1wMcy83fWfOty4Dzg4un/N28cLQXW5n1KBwFNzNWZrEu9/I9n0Dj5oep7Wt1TX+YoLG/rJLQUWbKZaGizauZVZn0/larMcQBWZTOkBFk9lb17ccxBZEUvGywsma2YoiyZJlPWJZsFOpE1oOnRgnrBmTnTDFi2GcZIYjOMI+QxwNOAD0XEB6fbfoVRYF0WERcAnwHO3VS04lK/UNm7KzNlipiSd+qQlA6imiHVZFivpO9rHldhrpC6mVfVKC3IVeKlfBAyIhc74XGtfvlS2PGDpnRQJYiSbDNYGER9T8L0gGZYr8ZgQ5cpU8ymsnjpiGJPExFnAy8D9gCvzsyLD/j+3RjHTz0C+DLwU5l5zZH+3kW4Dv4VHLK+5XFbDNbHih2RbTzIHAKrURg2ACK79JX6LNk8dhN7d9W8K9kcLdXzJSnD6lOOJxOFQie/LqjK/FSo5l112gpLMlpNRJaSToJIY1oxj129T2z0ArOf+vfHiNgDvAL4EWAf8P6IuDwzP7rmbhcAX83MB0fEk4CXAD91pL97oa6DR45gjpbStKKLQ6DqI1E0IkPT9yWadzX0KZtT1UirSgfnsavjqdwBNYNqO7kD6uIqYqoGC2vc8XrEVDGkZtueosHC0Etsdel7yhzIJmsFlw7uR1M6+Ejg6sz8FEBEXMo4Vmqt0DoHeOF0+U3AyyMi8ghT7s2FVn2WSFc6qBJaWR93GDQeG6uCjJbKHVAliGaiHi2RKBxE2UKJbbwoU6gw2VD2PVWjNUUpDysz2ejlOqjoexKtVdZP1SPzBJNpg2gIcHVcpbV7F6GhsHY3d+Uw90knRMSVa67vnQz0YJzX+7k139sHPOqAn99/n8xcjYivAccDNxzOYub0FlqpyGhpBJHWzbBHRmt08uvhuEeK+p4aObjJTCsGXd9TNYNsYHEnkSEaWIzKebEehWmFivk6y98W0BwDVVwVrTJPAvE2oOvRqiaFa9UMV64Xm53+tuYkh/1edkNmnlG8nCOmt9AS0KuPqtFg4QnJXCZRRkvmeqOaz9Ug5jxup9JBlYBTxOyx/bkTVTma4rMnBSoB163MrzymqMRPaYbRbbiwgi4CzojRzBu9Fjh1zfVTptsOdp99EXEUcB9GU4wjorXQCgTCqFOPVorKETNlfU+amVd9SgfHuE2OQa7osjmieU/lw3oFMVVxdfPJ+phWqMwlVGVzstLBRoOFQSdgNK57Cnv3PiJrHNm8u63NO4nXrgj2NO8HTo+IBzEKqicBTzngPvMxU38NPBF415H2Z0FzoTW++1X3Jwl7tKpfSOYZrXLLdNHGaqYpx5MMFlb1fs3q+5Nk/WSiHi1Vf9JMYhkvEgQCx71x1pOqn6w8LAPBTCQMqxkIjcU9KlfLelKUbxjFcY9+qmGSGQp2+3Bh0JhsqPqpFMJwjNnn+VJSX52SqxHxLOBtjPbur83Mj0TEi4ArM/Nyxhm/r4+Iq4GvMIqxI6a30EJhhqF0B1QIrdqQY1xEcUU9WrIZUposkar3SxFTNe9KVTpYPqhWZlpRX+Y3Zgrrkb0cNMo8QZ9yvPlzpSifVMy7UmSzcurOUcRVoBsCLBCbqRks3KlssFP2rSWa0kEy8y3AWw647VfXXL4V+Mnq39tcaGns3TXleMIyv+qQA5rSQTT27jLTClGPlkrA1ccUnQMigwnJoFpB2SD0EpvaksTysG0GC++PWx+2jSicoxIwCrplnjoJmGrmj11SQmmxJUVS/bQgegstkeugZgiyKlNWH5JBKIgkpYONerRUGZJmg4VVPT+KjJbGDENY5lcdE5UYULkZ9ihHBF0GTmLvjuo80EiBbvbu1ajcAVU9WrpMWa9+qnoB1+dDjDmqvuBF0VtoQblxhbZ0sLqWQ1k6qOhPqp8hBRpRyKAp8RtmK+XrlTnjpWqOljCjJTCYWBVlC1V/uhrnxdKQU1zdm6mkbK425BgXjSjSZN80865U7oAu85viNhrYW41qWLEuS+gsGQDpjNbyIMloKeddCT6tkezWQpIlgj4lbkrx0sWKXSqIJKVo9etVZEeg13kwlreJsnrlUVUZoj7leF3WuRalbXolCsdBEPVSxdBOZCmEkarEr1umrBea/vBF0VtogU4UKVDNvCpGlrIVlQ6q7N1lfWpNNthdZl3NY2qs6DU9P6BLRu9mVJknEGW0ZKWD9SgHFleTQndAlRW7Km41g2CoLuzuXjKzs2kvtMpnXqlKB1dVmbL6kAyQq3vKw+agsUzXuNNoPlEZROWTGpGxwqA4BhkiK/Ye864AZp0yWqgcAutt41WZJ50gSpF5h6DELzVOftIyv+IM1DD9q0YRM9H0PCnpsl5Zliw1fXUtcengkiAyw5DU48lsqzSDhTUzpPagmHmVgplXOnv3+g22rMxxUGWJVAYTAtfBdmYY5SGltvHVcWW9VELLeHd7qErnFP1kuqOqKkWrNq5IlclGs34quw5qsRnGMlFuhiHKPEGbMr8UzbsaYzcpHVQNLBa6GXaIqYqrsHYHJPOu5nQpw1KKwi4zr1RW9Cp050EfM4zx/x4lboqywUHkDmiMHJthLBGZ9aJI6Too2QlqMloKVKWDGrGpm3OkMQTpM1h4EJhWKKzdoZtpRUhiq/rUVOJFJt4EMWX27orBwkKl2cWKXdX3pY5dycBMZrIxNMkSOZulJW2GsVyUz7yS9WipJlNq5lJJerRmeySZMkWZn27e1Ur5bCrlvKuZqP9t1kVwCwVcvUOixjZeldWTuRk26tFS2bvPY1ejyT4NEqHVabCwZKCuqMRPhUv8pmPgOVqAM1pLhCqjJRoaoygdFA0WlpXNiWZIla9XsFYYM09derQ6zbsC0aZdJDIUw1/nIqs68TAI511Vo+rRUm1VZKKwPqxuYHGjjaDSGbCLKOolXJSlk32OQzsavedshoUJrYjYA1wJXJuZT4iIBwGXAscDVwFPy8zbt31hqowWGo8NTengiixtqyrzK48pEEQwGkx0KUVTiCFQlYs1M+6QiePykDq79EY9WqOAE2WemrgOKgWRKlOmoF9JoiZbpqDLbKou6+yMhVYNzwY+BnzbdP0lwEsz89KIeBVwAfDKdSMk9aIoRRkt1XROlXBRlSS2KRnTCSJlf051TJlluiSrVxpyPzJjAUlc0YBlSUyRm2ET8QYIjc1VZis9BFwnkbU/tqDvqZMZhqo/q1MGztyJSwePkIg4BfhXwIuB/y0iAngs8JTpLpcAL2RDoZWwulq7OFFGK1cRlQ72EUTDbA/VM68yR1FYnYFTGndoRIZmrZJ5V9Svdyzx6zXvSiNiy0MyG+rnXYGu70lSOigyBBmPgaI/qZ4hhfOumjj5JYMsropqoZEMMiv2atqJrBycLcNmGFX8LvDLwL2n68cDN2bmXDXtA07eVKTqPyRVj9aArMyvmtHeXdT7VS0yJpHVqe9JslaJqYAoOyIYApzCmm5JtpA+IkMVN0VxVS/fndCYS2jOriQlM6+gj5MfaMRWJ6GRzHqtt9Fa22F79yMjIp4AXJ+ZV0XEmYfx8xcCFwJ8x/0FincYZO+qXfqTVAOLGVbalA4qy+a6lA5qxWZ5WJEznu7Fvst6VaJQwXydCkOQTgYTKjoJF9VaFRkHlV26gk5rnVP9nFlk6XGP1pHxGODHI+LxwN0Ze7ReBhwXEUdNWa1TgGsP9sOZuRfYC/CIBx+V9a6DqhoRWvVoyYYAN5l5lSJDkPEYaOJWozKYUMzRAtExQFWKppzTVh1PJIxlM6RUIlYRU5B5yhSZYWgYpn8dsGmFNm41o8V9P2FoLLSOiMx8HvA8gCmj9ZzMfGpE/DHwREbnwfOAN28imKhHqzYkQM5WyksHc1gZy/zK5zKtCAWcxt5d0fekmE2liKuyYVdtsBVlfkrxpjEaEX3uIog7fkakcLXsU+annHVVPVxYNZtrmLat5XFFZYMKMaAShV2Ei5LMXnO/FIyi0HO0VD4Bi2KZ5mg9F7g0In4D+FvgNQtZhWoHNCCZy6Tp+1LNkNL0aA2pE3DVdOsnkw3rbeKOp3MHrKdTJmcet02PltLeXRJVg8rivdNw4S7Mj2l1qd9uF0MjFoVKEme0ysjMK4ArpsufAh655SDlA1MGzbwrkIgi2WBhSUarvkcrJ5GlMdnoM0dLVeKnMNmQCTjqX5y79anpDEEkYcvZ36NVLAhUM7+qs1kwliP2yur1ElmdyvFU/VQqK3YF7qfqiV0HlwXFHC1RRitX92jK8RQnY+pMK8o3gpNw6bTB7mTvLhNwIpFRntESxARdOZ7KsEGVeaoWL+Nas40wBE2fFvRyHuwithTW7qDpz+rGaBtvUWRGlEZU201zoZWwWvwCJasVEtScTv1Z5VmiIUS28UHO9pTHHWb1ax2GPW2c/BRzqUDrkKgSGfXHVuQWKsqQdJt31aZ0ENFaZXE1Q4C79CcNoVrrTJclamKG0WWGljHLQm+hpSBT0/eU9eJlvzugYlhvE1e4ecwu6x0EM69UwmXs+dHE7fR8aTbuIZtNVR5T2KOlch2sRjVYWOMOqBksrOrPAmGmSBS3mm79Pv2c/BRlSl26dxtiM4wlo7xHS9fnIDlxJKWDqjlaqoHF9XFVvVRKh8BqBlEfEahMG0QzpMqjTrGb9FN1FIWdtitKAdMBReZpYGgjslSoyvA6icLxGDQbBO3ySZthLBUJzOqFVpcerbm5RH3pYL25BIz9ZKoyv/qYojlagjI/1byrFFmmzwTOi6DauGsE90w1rq9R6SDUHwPZuELR9nK0uNeU+dXHTIkVu6rMD+ozL4PIbW5gJtm8dyrzy3SPlrkTC61lovjvcvwApMcMKYYY53MVM8xWZPbukqxDk3lXoBFFuoGyoh4tRNmnbhktQUxlmZ8iZhc7+nGOfY9yvBTNu4JeTn79ytv6YEFk1Fho7WRU864yygXcPJOlEkXlMYXzuRTobL2bZLQazbtSxVTR6flSmVbILNMl4kV3fqmc/Krpsk4lySBzCOxSktfJ2t00JYPB9u5LguLdT5bRUsyQWtGU+QnWCr3MMKSOe6Iyv2oGUemg0o5eEVNjRa/qqysPqRtYLIjZTQyoZl51Giws69FqIlzA/VQwlQ4qnBcVJZlo1mpGEpGnwYLoLbSAXC0OOER5L9U8bhtr85mmh2bIYBBktFQxu4gMncGGqo9IN5uqPKbIeVHXS6SJKevRKl6xqp9syJT0UnVyB1SWDXYRRUPO2ogXlQ099BJwrXC2cD8uHVwWBBmtFDnuKUwrgHLLeJhO8CZZPVCVYenEZnn2TThHq8u8K0Qxx36y8rCTOK6PCwLXwdQIOOV8rmpU867G2E0EXGQfQSQyrVCRDFJhVIkzOVq6ZeVVWGgtE+VDgBGJF0Xfl8i9TeW416hkbBjq512Bpo9G1pvT6fmaYlZv3DM11uayQbVNxBuMGwqdeUePzYrLJ0e6CLhuuJ/KtCR1408WQXuhVd+fpJshJRksLOql6mIEMY+riNmldFA172pAV+JX7ryIxsVO5ZCoQJl5UqAZBK0RWZk6Jz9N+WCf2VSStU7rrM4SKc0wqumU0YMxU+ZeNQOaMTiLpLfQUpQOCuZdwSiKhtUejns5hKT3axwu3CNbqBKFCoOJFH36ozIEUWSJ5n1f9f1vqj41RfZNV4rXZXC1zDIejYAb0JTjKeZdqZAJuCaleNCr96vbvCvJcRUNQjZ3YqG1TFRndFJjQU6uiARcn3lXstlUTeZdgcbFTieIdAKuOq6q70tlby8VL4IeLdXML90g5B5Co1OZXyfTinkfUfUmu0s2a477qUxXulSSbIbeQksliroMLEak+kW2mt1KBzvZu3ead6WaSdRpsLDMzbCJeANdf5JksHCmTBR1cwlUILH1VrkkqsrbGmXgjIZOH7yocUZrmaieTbW6R+c6KCrzK4+ZKwwCK3qVk58kpmyGFOUmG0rx1sV5EXQlfrpsYXlYmb27Ck1/Uj06x0FFz5OoHFHk5KcoG1QhE2+NRDFoxGa6HM9MqOZMLor+Qqu6J0M07wqVbXyjbM5MOJ9LEbNLRks1VHcmnHeliasQ3Lq1djGuGE02FFkiZQauh4Ab0JhsdNu4a4ShJkPU6diqhvW2o1FPWf0rTccsmebD40XRW2ilIKMjenJzWJHYxuvKHHs5+SliqjJlijlaqtJBBbqyzPKQkzCuj6tgvs7q5eqyb5pCGZ1pRR/XQQVDaHq03Ec00lLAdEAiNn3OqtnujFZE3A94I3AacA1wbmZ+9SD3eyvwaOCvMvMJm4m9EKEVEccBrwYexrgv+Bng42ziQR4QqVy8qIbq6vqT+jjuzWOXx5T0uoiG9YrigsJxT3ceyEwQquMJe566lA52o9MxcH/WSJeSPFmWzP1Zxiyai4B3ZubFEXHRdP25B7nfbwH3BP7XzQZeVEbrZcBbM/OJEXEM46J/hc09yP0kgoyWqHRQmSWqRlU2Nxv6lA5qZ4mVh2XWpMwRdKWD4ywtgZthacSRFMVVmVboLO57yCKtGUYPUTSIXAdVj18l3jrZxqvQZHRUfV8iWpUj9mMBPVrnAGdOly8BruAgGiQz3xkRZx54+3psu9CKiPsAPwycD5CZtwO3R8SmHuRdSDQ9WgpBNNtTn3GYsm+SuLJMWW3cQWQyojSY0PRoaQSRRGQI+9+q9+0pKh2UZbRUa60PK+x/U/Q89Sob7GQwoUAlhpQb96FJP5XyGHSaz2V0KD403QQnZuZ10+UvACdWBV5ERutBwJeA/xIR3wtcBTybw3qQ9ZbpKZt31cfeXTXvSjZHq1HmSemmoxBwGqOR8pCyrAvCuNXMj2t9K3WKxKZAEE0xNX1aogxJk+HCKRosnAwSYdRp5pX7s4xZw+Hvk06IiCvXXN+bmXvnVyLiHcADDvJzz7/Lr8/MiLoX5kUIraOA7wd+PjPfFxEvYywT3M96DzIiLgQuBDj121bqzSBEggh0ZX7VKPvJ2ti7y0SGsverOCa6eVdd5miNaxW5GTaZTaVENfOqPGZ5xHlckXhrdyb0waKoHzav6MZh779uyMwzDvXNzDzrkL8x4osRcVJmXhcRJwHXH84CDsYihNY+YF9mvm+6/iZGobWpBzmp070A33/S0Vld5qeadzXM6udz5TSwub50UHQMBHGlM6QUG2xh31MXMwxdtlCTfdNZpmviKmKq5l2phhZXo3Qd7CKKxjlavSzTq0vROoms+XO128vxeoms3f1czRl7mLe9dPBy4Dzg4un/N1cF3nahlZlfiIjPRcQ/ysyPA48DPjp9bfFBCowrspHr4CRcOm2wu/Qn6QSRTmSUZ7Skc7Q0YrMapWmFyjK9PKasn0yXzerS+6UoG0zRYGEVHfupqhlSI2JVg4V1A4u70GmtPVmAGcbFwGURcQHwGeBcgIg4A3hmZj5juv7fgH8MHBsR+4ALMvNt6wXeUGhFxEMz86MH3HZmZl5xOI9k4ueBN0yOg58Cng6scJAHud3kUG8Zf2fcapGxMmW1evTmKEVRNSrnRWgmMiTPl3JQ7XLHm6NyMgTdmhV0KfNTzrrqIoq6ZN5A259lK3YdXf4WjJ7tNsPIzC8zJn4OvP1K4Blrrv/QVmNvJqN1WUS8HvgPwN2n/88AfnCrv2xOZn5winEg3/Ig1w9Ub++uKptTOO7NRVZ9Rktnwy6ZeSUp8RMJomZis5PQ6CLe5nQ5Bir3SdWHA2PsHs6D3Xq0NAOLB918quo5WhZZxmwDug+6F8FmhNajgJcA/x24N/AG4DHKRW2WBEHpoMbenSEYZvWZskGQfZvNdKYVXUoHFVbhMM67kpQ1NZp3pbC4B5UVfbPSwUbzrsbZVPVISvyEs566ZIq6WcZ3yo4kM1npXK+SPKN5x+nFWPWyu4TWHcAtwD0YM1qfzmX5y1WUzYmG6uoc93rMu4KxubGLGUaKxACIyvHKIypt6OtjqsoRR1FYH3csy6yP261srk/mKVsJok5DgAdmzURRo7VKZnPNcI+S9nXRLKRHS8ZmhNb7GY0pfgA4AXhVRPybzPxJ6co2iyJD0mTe1VwISGZTieZdaXq/ykNKS/xUtvEKVKJQNaOsmk7liMqtj7LMrxJF5k1Nt0xRJ6pL/TqJLLMWP2/dULRuLIrNCK0LpmYwgOuAcyLiacI1bYnygcWqHq0hmFWXOTKW+VWjtfVuktFSzbui2wwpQVxR+STUvzir5l2B6thqYiocAsfYPcr8BlLiEKhZ6xizWsAlszY9SkOjtZoRnYi1yOqGyohrUWwotNaIrLW3vV6znC1y+NOjDx1SMO8KejnuzUTlkwpRlEKDjd3uvKibdyXK8ArK/FTzrmSW6ZJSPA0DKSvz64KqzK9TlkxphqFgUFmmWxDAknSlmEWja91YBIsYWFxGoujRUpor9NlgdxEZurXqShLLY6LLjrTK6jUr8+tU4695vvo8/mzUozXfsFfPZery+OcohEs3a/cus7na4WMgZ1dltJYeQT9V9bwrmEw2RH1P1Ujt3ZuITegjMuaPv7wskz4zmWSZJ0FMFSonQ6Ug0hUL9XnmJIKgiV26CosBY/qS7KyCz95CS1CCNMz2CJ38eoiMYdCU4yn6nlS9VKrySVWfmmyt5VHnWcjimAj7k+rD6uzd60MCGrGlcwfU9FJpHPf6bCdUImsQWpsbDX6+jBRRe8Gi6C20oL50MDXzrjoJrU6lg6p5VwOieVfUZyHnIqN6vcrW5OqnbC5aFHFVvVSqRFG1KFINLB5j9xBwSpSGGPVx+5TOKcr8RhkvimvxYsyOpLnQEvT8KIYVM+/9Ugi4PqJQYTChHGzXKUskE0WSEtJe2ZwutvGjiBcIF5XjIH1E0RCaHq0upXhqfBx0tBFwXdYppcfr4XZgM4xlIQX27sr5Sbt+3pXKxa5H79s8rurY1scUzbuij3hRvu11MjPu1PPUqRwPdOutFi8qu/Q2QqAhPramK4r2lUXRWmhJvPZF8666lQ62sXdH06OVCauiYb195miJyidVboYi8SYZ1qsyrqgPKcuUDY2c/AYGiWV6F5GljqtC4zzY6xjUo3v8KhMXZ8t6kbZ3Xy7qe7Q0Jgiz2Z4+Qks2Q6r+UwpVhmgQlKWC0riiPOQ0qLbHi52qR0tmsoFo5pVCEIlKB1Vlg4rBwkpUM6+qM1BK8abIlknMS0Qb9sxePVqtBLfsuDY6Bg3p4ni8GZoLLc1cJtXmskuJm0oMqEQR1AsNpcDQvezXm2wo0A3rNSDKwKlEUZNnbcy99cloqcr8jDFmO3Dp4LKQlM+8yqF+CDJonfwUMVWZMlU2p1pkyIbqCmKqLO6HVDkvigxBZPbuiixRn9JBneOgyhlvd3/SLCu/opfroDGmJ2MliYXW0lDtuifrT1LNZZJtsBvFbZTZ1FjcizJEsgG4fTJauuybJkek66XS0CWjJZujFTq78GpUImvIWZsyv0SzVh2d1tqHLm6pbREZcS2K1kJLMfNKWTbXpXRQKzLKw04ZnVp0vV/1G3flnKMur3XzdUqObZeDMKEZH6ARcNWMAtabSxWd+og6oTiuqsym6hxQZmJNPxQfyi+K1kJLQQ4rktlUoJt5VY2yl0olXhQxNRkSlZNfD1EIk1tofdhWzbNjVk8hNOpRmWFAn0+Gh9D0aIFLHc2IhYYxIxJH8QWyEKEVEf8OeAbj8fwQ8HTgJOBS4HjgKuBpmXn7RrEUJWOK2VSyOVqNMk8qJz/Z3DPRsF6d2Up1PJXY1pU6ViOzdxfEHPb/r8kUVaPJkukEkQLV5lpR5tcpU5g2AzGmMbZ3PyIi4mTgF4CHZuYtEXEZ8CTg8cBLM/PSiHgVcAHwyo3iVc+80vVo1du7S4crKyzuB13vV3lMhDOJBHFTIAhUZXNKy/RqkpRlyroMFlZlnbLbHC3PptLMpWKQCCNJ71szG3YZtkw3YnrUOmyORZUOHgXcIyLuAO4JXAc8FnjK9P1LgBeygdBSCI0cVEKrT4/W6Aq3u0sHu/WpdRosrKDbi/KQ2WrmVRtBFCmbS6VAeVyrRZEdB3tiYWi6YdfBIyQzr42I3wY+C9wC/CVjqeCNmbk63W0fcPJ2r21cn26OVhd7d+hVkriTankPB1VJJigt0zVxFTE1ZXN9UK61y3DhTlkn6Lfe3U434wpj1OykM3cRpYP3Bc4BHgTcCPwxcPYWfv5C4EKAB97jmHLXQeW8q079SZLsm8jaXWUuoSsdFNi7l0Yckc1PEvVoQb0oUjoOdhksPBqba/qpFDFlphWiTFmn4cKKtabI3r0bXUSRnyuzHeykD9AXUTp4FvDpzPwSQET8CfAY4LiIOGrKap0CXHuwH87MvcBegH963LFZ3/ekmXc1G1Y0M68EMZW9VLMmzosq1xvFXCZZz5Mo86RyHVT1U2mMO1JY5teDIXr1aClQblqrS/26CIE5Gsv0XsfA9HE2NXcy7pMstI6EzwKPjoh7MpYOPg64Eng38ERG58HzgDdvJlj58FdRL5UyU6ZAU+JXH3O0IFdZ3JeHnfrfNFTHVQ3rVaEy2Gh0CHSGIE2OQgrHK3ex3x7la4+1dqSb4DSmIz3ecTbHInq03hcRbwI+AKwCf8uYofpz4NKI+I3pttdsGIson001ls2p5mj16KfSDevVlONB/R+lzHVQ9ElNF/EG4tLBJq/OSgHXRRSBMwSDy+Ykj3+wGGqInzNzJ85oHSGZ+QLgBQfc/CngkVuNVT2bSjZHSzQXYCZaa6feL4VDjdIURTXvqTwmmqzeWJYpiKuao9XKHVDTS6Xp/dL0aClidylxXEt15kWZLdztwshZMmN2Louyd69BMPxVtcGeDZreL1nZnKSfTLfe8pj0MZhQzbuSzY9SlZDWh53K5jR0mnmlEBopMq6QmWHI4mrmPe12JDO/pMe1T09ZlzJa05NkZ+U3ewstBD1azezdgXKTDV0mR+fk1wWVmyHUG6OoTDZA95x16SnTlGT2yZJ1Q+U4uNvLBo0x5lvR7cMXQWuhpShxU5lWqAScoiRxEJU5gs6OXhFTVd7WxTofRO6Aoh4tmfOiSsAoShKbbdwVAqajQ6CC8oHFOSMF9u6KskFlxsXZHGP09Hq1XZ/WQgv69ObIZlMJ4o5ioDQkAKuNMlrjbKo+JYldhAvoSvwUZXNKw4outsMDKRks3E0UKhjQmGH0E4UWL21Qlk+65NWgG6+zKNoLLckcLdEMKcXGPQVxVWuFPhmtsZ+sPOwYW2QwoYjZZbDwHFX/V3lMl/kBIkMMQZbMQqAfvfrUOq3VGD1d2gA2Q2+hJSjDGgbdvKsuJWPKrF418+eqfAhwo9LJOdXHQDWwWGXvronpwcKJZrCwqu9JxSAomzO96CXejOnLDtJZzYWWgG4iQzMEWFfip+l/Kw8pm3Mki7uTXpUOk06HQOcO2Oko1COzHxf2fSlcBxWiUGXvrsgWWhD5GGjxsVWSonmji6K10EqC2WxPbUzhsF7FzKtWxh0Z9YOFRX1fqj90VTanU+YpSdlg4erskwcLz+doaUwrumzcx7jeXKnoJApUa5Udg0bH1pg5O+msbS20oI+9u0rAadYqnM/V5BiMcQUx60PKXPxUg4VHoxFFXIEZRrOywS4GGypssGHMGiyyTFNshrGD6TRDK9GZVihQDqGrjqsqnwSNeDEjmpJXzRPWRRQNoenRUg0shnrBpStJnEkyGZphvTOJFbuKTlkyY8ydLGJgcUTcD3gjcBpwDXBuZn71gPs8HHgl8G3ADHhxZr5xo9i9hZbADEMxlwomy3SFO6CozFEnMjQOgdXiRek4KLGNb5R5ks3Rqg8p/GBAlSnz5lIn3myGoaCTILL75BzBc9boPDB6FvCB9EXAOzPz4oi4aLr+3APuczPw05n5iYh4IHBVRLwtM29cL3BroZUEs2GlNOaQwVAcc39cycyv0pBr4qos7utJgXhRzXFQlvkpYuqMRnqU+WldB3tsLAYGmUNgm2Ngx0Epu73/zWLTmLuygGqtc4Azp8uXAFdwgNDKzP+x5vLnI+J64P7AjesFbi20FMj6fdCIF6g/IWVDdQUxFXPE5nR565vLADsP9kHmOigYLKxC6eTXhUyNIcgY2xtiY3T0ea3thnKG5zqcmJnXTZe/AJy43p0j4pHAMcAnNwrcXmhJyvEaDSzuNkdLkykrDzllIAVxqXdeBF3poEIQyOZo1YcEbMXeSbgoZ3N1Og4KkdXp8Rs/X6Y3h1lIckJEXLnm+t7M3Du/EhHvAB5wkJ97/l1/d2bEoT+1jIiTgNcD5+Um0tGthdaoehXleCqRUR5WV+In6qVSfUpRHVZnP96odFBo794FnbW7bhMkGS4sitllaLE3rSPdysY063Um1hgth52YuCEzzzjUNzPzrEP+xogvRsRJmXndJKSuP8T9vg34c+D5mfnezSyqtdACjb27zGBCJF4UMTUbd1GPFvWCW3YMRHGhV+mgJqsnyL4Jtz+KjFYXkaVkt/dTdXv8GofEoZ0oNMZM5ELMMC4HzgMunv5/84F3iIhjgD8FXpeZb9ps4N5CSzDvSZV5msfuELMTqvlk0Eu4yEwrRCWJ9THHoBIBJxFEupNLMwRY9Sl+n82wwnUwGWTCqFOGpIsZRJd1mgPx82Y25GLgsoi4APgMcC5ARJwBPDMznzHd9sPA8RFx/vRz52fmB9cL3FtoiQwmVPbu1aiyZCrxMgjs+EE0WFgo3mTlk00s7sfYAtfB8oiadc6ROC822lB0KRuEftbuivOg0wwtM9LpgwwdPm+7sYg5Wpn5ZeBxB7n9SuAZ0+U/AP5gq7FlQisiXgs8Abg+Mx823XbQgWAREcDLgMcz+tSfn5kf2Oh3yHq0mphhqOzSla6DXdwMVdkclZuOrKdMEFP1ItppsHAXIwwYBVGn8sFOYrMbzuho8DlrzF3pVFG0EcqM1u8DLwdet+a2Qw0E+1Hg9OnrUYyTlx+1mV9S3qPVKEs031yXD21uZggyj12JarCwCo0gSmmZXweUxh27vZ8qmbVar4IhZ7t+k23xZlR0Ml4yd2UnPXMyoZWZ74mI0w64+VADwc5hbC5L4L0Rcdzc/WPj39NDZAw0cx0sjzrFFtnRK9BZpmvo9AmQariwAoUY6LQB2O1iCMaMQzdBsJtL/ebPleI563YedKLT66LRoahWWyTb3aN1qIFgJwOfW3O/fdNt6wqtPHwLyEOiM1ZQzdHqg0681dNJDMnmUqnmaJVH1NFqrZGyvqdOYqtbP5UChchS9vtYEBlj1tKo8GVDFmaGsdFAsEMRERcCFwJ8+zH3FGS0VFmXPq6DqYorNIKojtst8yQxVlA+X4KYnQYLjzOkdtA7yWEwSM3zjQI/X8LHb2FozH520l/DdgutQw0EuxY4dc39Tplu+xamKc97AR5yr/tl+fwkYR+RxABANrC4POxYPlkfto14A8/Rgm5lg00OKndmnaqzTx0319VrHtD0Uo0lic7AmU70ez0wvRg/7F/0KurYbqF1qIFglwPPiohLGU0wvraZ/iwFKRssrMtmVZ+PKndABUNqxJtMbHcqHUQpCnd3SSL0MsPoYsVucwljtgFn34yYnXSGKe3d/4jR+OKEiNgHvIBDDAQD3sJo7X41o7370zf7e+pnBykd9wTZt9KII9oZUj2MK1TZN+gzR0tFp566HHMO5XE7lQ2qxJtyWO9up9P8JPdSGWPugrBtYREoXQeffIhvHWwgWAI/t+XfgWaOlsq0orzMURBzHlfX+1UedhqEXB9TVjrYZI7WeAxUs6nq6VTmB5qSPFU2p9PG3WhQCiLd+WURZ0w3lC0Wi2BhZhhVqIYLV5PC4cIKVP1kkmxGo79IVYlfK3MJSdmgztpd47zoDaCCZJC4DmZqsm/ZrNSxV/ap0VpbHVcNtnY3a3FGa2mo76dSDqlt4zooNASpRpWBHLOl5WGBVm//QiGvypQ1OXEFyPqzVHGbiQxjoKM5TLf1GtPrA/SNaC20FJbpKShDA12J39r/y+IKe4hU/V8KuphsKOdoKdA4T6Yo85SigcVDLzMMb9ba0Sv7ZDT4HDD9SHbWmdtaaEF9Bko5WLj6xJmXI5abbKDJ7KlK3DqJDGVszSytTuWDO+mleet0cQZUMi8brBYZ2Wzml2QAsPv/LF6N2SZcOriDUbgDquMqkBhBiOZzSTJPKC3TBYJIElODomxQOaxY5RCoEkbVglO1TmU/VRcU4mVo9PiNMeZg7CCd1V9olbvNoTOt0AwXLg85isL6sEaMShgq2M29VNCvxK9TNqcbFkb1dBLbKjplCo1Zi7JHfhG0FloKe3clugzBcsdbG1fTn6OJqVprl1JHlbW7alhxN3v3anZ76aTRoxIwFkYWRsbsVFoLLRD0JwlL/JSGGJWkaLCwcjZVNbq1KvqoVHOphGJLErWeFJlhDCEywxCU+ak2gAMa10FNOd6MbDZcebdnIS3ejGmKyJRuUTQXWvXGFTqRocm8qXq0dtJJvmzs9mOr7KcyGhQzpIyubHC3iyxjTG920itYc6FVj6pHS2lXWV86KBJv6OzNq+m0VmXmqZMhhgJlOZ43w0aBKgPpDJExZjtwj9YSoejRUrkDqkoSR3v34pips2FXibjqP0rVMYA+n9TIrN0lUXWZMkkpWiOr7E69XwoXQzW7vTennYDrtt5qdvvjN9vCDtJZvYWWoo5T+RKi6qdS0GWwsKqXSkWqzDDqQ0oNJrq4Dqqs3Y3O3l1R5ujsowHPEjNmu+i0r9uI3kIL3WDdDjHHuALjjvKIU9xGZhg7LXW9THQpG5zTzYpdgYWGjwF0EgR+rozpzE7qZW8vtKozL90GFoOibE7Tp6ag29+ibGBxIyt2BQMaFz8Vyk179XGwwNChFC69SvI6rdUYo0TpabAIWgstxZMxCG3Yu8xP0pW3aQYh6+ZoCeY99dAtgNJgQ2OZrqDLOqGf2FSUDfYSFyOKNXc8DsYYM6fLh7ybobXQUqAaqqtAudZOs6mgz3MGfXq0oFEvFSnrp1LMprIoGpGIjEbHtRMWb8aY7aLHzmNztBdaXUwbUliOV52B6/Z2KunRajSwWIVypd36tDpRLTQ8Q4t2w4qNBbcxXVHtvxZFa6GV1Jf5pap0MDWiUDUIWTabqj5sqwwRqI5BHyv2Tpmcbpu1buvthGq4sPFxlSEbiL2DdsFmCckddY61FlqgGNartMquR7G/Ho076uN2tGKvRtNPphJZuidLEbuTO+DAIClJ7ITLBl2OZ9bic8EY2HmuzzKhFRGvBZ4AXJ+ZD5tu+y3gx4DbgU8CT8/MG6fvPQ+4AJgBv5CZb1OtbT26lCLO6WRFr6KLILoztsB1sDziiEYQ9XkF7ZR9U5FjB5wstiTuLi71SwaZgLMwNMZsBzvplUaZ0fp94OXA69bc9nbgeZm5GhEvAZ4HPDciHgo8Cfhu4IHAOyLiIbmJd0uVFbsiZicTFdV8rk6fUkgykIKYKjq5/szLDBQb905ZEvdT9RNZnc4vY4zZDlQjaxaBTGhl5nsi4rQDbvvLNVffCzxxunwOcGlm3gZ8OiKuBh4J/PW6vwORvXtxzP2xFeJF1E/WBdW8BWV9sO786vPESWaJNduw9hn+arqdW91okynrsk5jGuM5WnX8DPDG6fLJjMJrzr7ptm8hIi4ELgS431HH1g8sRiReyiNOPU+CuKrM0zibSkOXGWWd+qlS1JDaSRCq+qi69WdJZl4pet+E2azdLox3++Of4+NgjB5ntI6QiHg+sAq8Yas/m5l7gb0A33n3+5c/EyoXv252lW3cAVXDlUUDi0H3AtKp1E9lMKGgW59Wub27cGPpUkdjjI5er91mZ7LtQisizmc0yXhc3rnjvBY4dc3dTplu2xCVFXsHlJknFbqBxT2eNN0sNVWmTNHz1OO56sYgNK3oRpfj0GWdRo3PgxEfBzOyk86EbRVaEXE28MvA/5SZN6/51uXAH0bE7zCaYZwO/M1mYlZv2XT27iHbXlbH1Q3rFQ0XVpTNCTOQXV5AuqwTYIg+QhPG8qNumbIuaEoS+zxXbfqdjDHmIIxJhJ3zgazS3v2PgDOBEyJiH/ACRpfBuwFvjwiA92bmMzPzIxFxGfBRxpLCn9uU4yD1GS2VvftY4qZx8tvtdMlAgq5ssFuWSCGMZP1UFkRGiGaeWJ+STKkwtOg0piXd9jTroXQdfPJBbn7NOvd/MfBi1Xq2gsTevTyiLuuiyr51GlisfHvu8knNME1Qqo/rzY8KlWmFYjM85KxV6ZwzRdAqz+3ny5i27KS/3kW6DpZQbu8uiDmnyf66JYpj2+3p2kkvTFtFV+Kny5J1EhnGGGPMdpCiD3kXRXOhFfX27rLSQc18LoXAUGWeRut8QVzZMVBkc+pRzhKTZLQiW7kOmn506qnqgjN6xphtQbT/Wo+IuB/jyKnTgGuAczPzqwfc5zuBPwVWgKOB38vMV20Uu7nQqmfIPmJgLgqrByF3cjNUZiBVyGaJ7aBPgJaJbjOvdjudRJbFiwZni43pzQJ6tC4C3pmZF0fERdP15x5wn+uAH8zM2yLiWODDEXF5Zn5+vcCthZbqk/xq4TJHMwhZs1YVXd7+VH/knQYWd0JZ4tcFVc/TgCZup81wJ3OJjnQ6F4wxWsa9/bbvac5hNPADuAS4ggOEVmbevubq3RgzWxvSWmhBvXiRzTlSxi4+H8dhvfUoM8GqbJmCLqJo7CPSmGF44z54WC+wCXNZs0WcJTPGdOcw90knRMSVa67vzcy9m/zZEzPzuunyF4ATD3aniDgV+HPgwcAvbZTNguZCa99tX7rhFz/5ym8CNyx6LWYpOQGfG+bg+Nww6+HzwxwKnxvmUCzjufGdi17A1snD/ZD3hsw841DfjIh3AA84yLeef5ffnpkRB59Bk5mfA74nIh4I/N8R8abM/OJ6i2ottDLz/hFx5XoH1uxefG6YQ+Fzw6yHzw9zKHxumEPhc6MGVelgZp51qO9FxBcj4qTMvC4iTgKu3yDW5yPiw8APAW9a776bqi80xhhjjDHGGCkxmlBt9esIuRw4b7p8HvDmb1lWxCkRcY/p8n2Bfw58fKPAFlrGGGOMMcaYpWCYxsts5esIuRj4kYj4BHDWdJ2IOCMiXj3d558A74uIvwP+X+C3M/NDGwVuXTo4sdlGN7P78LlhDoXPDbMePj/MofC5YQ6Fz40Ccpriua2/M/PLwOMOcvuVwDOmy28HvmersSO3eSiYMcYYY4wxxhzIPfccnw+5+49u+ef+7uY3XLWMPXI7IaNljDHGGGOM2QEU9FwtDW17tCLi7Ij4eERcPU1xNruMiHhtRFw/Ob/Mb7tfRLw9Ij4x/X/f6faIiP80nS9/HxHfv7iVGzURcWpEvDsiPhoRH4mIZ0+3+/zY5UTE3SPibyLi76Zz49em2x8UEe+bzoE3RsQx0+13m65fPX3/tIU+ACMnIvZExN9GxJ9N131uGAAi4pqI+FBEfHA+s8nvK2Y9WgqtiNgDvAL4UeChwJMj4qGLXZVZAL8PnH3AbRcB78zM04F3TtdhPFdOn74uBF65TWs0i2EV+MXMfCjwaODnptcInx/mNuCxmfm9wMOBsyPi0cBLgJdm5oOBrwIXTPe/APjqdPtLp/uZnc2zgY+tue5zw6zlX2Tmw9eUqfl9pZCxQ2vr/5aVlkILeCRwdWZ+KjNvBy4Fzlnwmsw2k5nvAb5ywM3nAJdMly8BfmLN7a/LkfcCx02zEswOJDOvy8wPTJdvYtw0nYzPj13P9Bx/Y7p69PSVwGO5cx7KgefG/Jx5E/C4iIjtWa3ZbiLiFOBfAa+ergc+N8z6+H2lGAutxXMy8Lk11/dNtxlzYmZeN13+AnDidNnnzC5lKuf5PuB9+Pww7C8N+yDjUMq3A58EbszM1ekua5///efG9P2vAcdv64LNdvK7wC/D/p3b8fjcMHeSwF9GxFURceF0m99XSsnDMHdfXqFlMwyzY8nMjAjbau5iIuJY4L8C/zYzv772w2afH7uXzJwBD4+I44A/Bf7xYldkloGIeAJwfWZeFRFnLng5Zjn555l5bUR8O/D2iPiHtd/0+8qRk9gMYxm4Fjh1zfVTptuM+eI8NT/9f/10u8+ZXUZEHM0ost6QmX8y3ezzw+wnM28E3g38IGNZz/zDx7XP//5zY/r+fYAvb+9KzTbxGODHI+IaxpaExwIvw+eGmcjMa6f/r2f8kOaR+H2lGPdoLQPvB06fnICOAZ4EXL7gNZnl4HLgvOnyecCb19z+05ML0KOBr61J9ZsdxtQn8RrgY5n5O2u+5fNjlxMR958yWUTEPYAfYezhezfwxOluB54b83PmicC70gModySZ+bzMPCUzT2PcV7wrM5+Kzw0DRMS9IuLe88vA/wx8GL+vlJPMtvy1rLQsHczM1Yh4FvA2YA/w2sz8yIKXZbaZiPgj4EzghIjYB7wAuBi4LCIuAD4DnDvd/S3A44GrgZuBp2/7gs128hjgacCHpl4cgF/B54eBk4BLJvfaFeCyzPyziPgocGlE/Abwt4xCnen/10fE1YzmO09axKLNQnkuPjfM2Hv1p1MJ+lHAH2bmWyPi/fh9pYy56+BOIfzhizHGGGOMMWbR3G3PffKke/6zLf/cZ77x1qvWWO4vDS0zWsYYY4wxxpidRi51KeBWsdAyxhhjjDHGLJyEHVU6aKFljDHGGGOMWQqWeS7WVrHQMsYYY4wxxiwByeDSQWOMMcYYY4ypI9lZGa2uc7SMMcZsAxFxXET87HT5gRHxpkWvyRhjzE4lGXK25a9lxULLGGPMehwH/CxAZn4+M5+4/t2NMcaYwycZtvy1rLh00BhjzHpcDHzXNPj5E8A/ycyHRcT5wE8A9wJOB34bOIZxUPRtwOMz8ysR8V3AK4D7Mw7t/F8y8x+2+0EYY4zpwM6yd3dGyxhjzHpcBHwyMx8O/NIB33sY8K+BHwBeDNycmd8H/DXw09N99gI/n5mPAJ4D/J/bsWhjjDH9SGDIYctfy4ozWsYYYw6Xd2fmTcBNEfE14P+Zbv8Q8D0RcSzwz4A/joj5z9xt+5dpjDHGbD8WWsYYYw6X29ZcHtZcHxjfX1aAG6dsmDHGGLMBudQ9V1vFpYPGGGPW4ybg3ofzg5n5deDTEfGTADHyvZWLM8YYs4NIyJxt+WtZcUbLGGPMIcnML0fE/xcRHwY+dhghngq8MiL+PXA0cCnwd5VrNMYYszMY81k7J6MVmbnoNRhjjDHGGGN2OXtW7pH3utuDtvxzN936sasy8wzBko4IZ7SMMcYYY4wxS8DOsne30DLGGGOMMcYsBbnEdu1bxULLGGOMMcYYswTsLNdBCy1jjDHGGGPMwklYahfBrWKhZYwxxhhjjFkC0qWDxhhjjDHGGFONSweNMcYYY4wxppK0GYYxxhhjjDHGFGMzDGOMMcYYY4wpxWYYxhhjjDHGGFNOgjNaxhhjjDHGGFOLe7SMMcYYY4wxppSd1aO1sugFGGOMMcYYY8wiiIj7RcTbI+IT0//3Xee+3xYR+yLi5ZuJbaFljDHGGGOMWRKGw/g6Ii4C3pmZpwPvnK4fil8H3rPZwBZaxhhjjDHGmOUgh61/HRnnAJdMly8BfuJgd4qIRwAnAn+52cAWWsYYY4wxxpglYOzR2urXEXJiZl43Xf4Co5i6CxGxAvxH4DlbCWwzDGOMMcYYY8yScFjC6YSIuHLN9b2ZuXd+JSLeATzgID/3/LVXMjMjIg9yv58F3pKZ+yJi04uy0DLGGGOMMcYsB3kwnbMhN2TmGYcOmWcd6nsR8cWIOCkzr4uIk4DrD3K3HwR+KCJ+FjgWOCYivpGZ6/VzWWgZY4wxxhhjloEkOSyhdSRcDpwHXDz9/+ZvWVXmU+eXI+J84IyNRBZYaBljjDHGGGOWg7fB6gmH8XM3HMHvvBi4LCIuAD4DnAsQEWcAz8zMZxxu4MjDS88ZY4wxxhhjjDkEdh00xhhjjDHGmGIstIwxxhhjjDGmGAstY4wxxhhjjCnGQssYY4wxxhhjirHQMsYYY4wxxphiLLSMMcYYY4wxphgLLWOMMcYYY4wpxkLLGGOMMcYYY4r5/wE/owxH9LBOiQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1152x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pylab as plt\n",
    "print(\"Size of grid_u: \"+format(grid_u.shape))\n",
    "\n",
    "session = Session(None)\n",
    "session.initialize_variables()\n",
    "\n",
    "def show_state(a, title):\n",
    "    for i in range(4): a = np.concatenate( [a,a] , axis=3)\n",
    "    a = np.reshape( a, [a.shape[1],a.shape[2]*a.shape[3]] )\n",
    "    fig, axes = plt.subplots(1, 1, figsize=(16, 5))\n",
    "    im = axes.imshow(a, origin='upper', cmap='inferno')\n",
    "    plt.colorbar(im) ; plt.xlabel('time'); plt.ylabel('x'); plt.title(title)\n",
    "    \n",
    "print(\"Randomly initialized network state:\")\n",
    "show_state(session.run(grid_u),\"Uninitialized NN\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "amnB9mIBoXa0"
   },
   "source": [
    "This visualization already shows a smooth transition over space and time. So far, this is purely the random initialization of the NN that we're sampling here. So it has nothing to do with a solution of our PDE-based model up to now.\n",
    "\n",
    "The next steps will actually evaluate the constraints in terms of data (from the `boundary` functions), and the model constraints from `f` to retrieve an actual solution to the PDE."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "-PHuAh0UoXa1"
   },
   "source": [
    "## Loss function and training\n",
    "\n",
    "As objective for the learning process we can now combine the _direct_ constraints, i.e., the solution at $t=0.5$ and the Dirichlet $u=0$ boundary conditions with the loss from the PDE residuals. For both boundary constraints we'll use 100 points below, and then sample the solution in the inner region with an additional 1000 points.\n",
    "\n",
    "The direct constraints are evaluated via `network(x, t)[:, 0] - u`, where `x` and `t` are the space-time location where we'd like to sample the solution, and `u` provides the corresponding ground truth value.\n",
    "\n",
    "For the physical loss points, we have no ground truth solutions, but we'll only evaluate the PDE residual via the NN derivatives, to see whether the solution satisfies the PDE model. If not, this directly gives us an error to be reduced via an update step in the optimization. The corresponding expression is of the form  `f(network(x, t)[:, 0], x, t)` below. Note that for both data and physics terms the `network()[:, 0]` expressions don't remove any data from the $L^2$ evaluation, they simply discard the last size-1 dimension of the $(n,1)$ tensor returned by the network."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "bfZvwnFooXa1",
    "outputId": "f0188a14-5922-4faa-b1aa-fb6482bd81f3"
   },
   "outputs": [],
   "source": [
    "# Boundary loss\n",
    "N_SAMPLE_POINTS_BND = 100\n",
    "x_bc, t_bc, u_bc = [math.concat([v_t0, v_x], axis=0) for v_t0, v_x in zip(boundary_tx(N_SAMPLE_POINTS_BND), open_boundary(N_SAMPLE_POINTS_BND))]\n",
    "x_bc, t_bc, u_bc = np.asarray(x_bc,dtype=np.float32), np.asarray(t_bc,dtype=np.float32) ,np.asarray(u_bc,dtype=np.float32)\n",
    "#with app.model_scope():\n",
    "loss_u = math.l2_loss(network(x_bc, t_bc)[:, 0] - u_bc)  # normalizes by first dimension, N_bc\n",
    "\n",
    "# Physics loss inside of domain\n",
    "N_SAMPLE_POINTS_INNER = 1000\n",
    "x_ph, t_ph = tf.convert_to_tensor(rnd.random_uniform([N_SAMPLE_POINTS_INNER], -1, 1)), tf.convert_to_tensor(rnd.random_uniform([N_SAMPLE_POINTS_INNER], 0, 1))\n",
    "loss_ph = math.l2_loss(f(network(x_ph, t_ph)[:, 0], x_ph, t_ph))  # normalizes by first dimension, N_ph\n",
    "\n",
    "# Combine\n",
    "ph_factor = 1.\n",
    "loss = loss_u + ph_factor * loss_ph # allows us to control the relative influence of loss_ph \n",
    "\n",
    "optim = tf.train.GradientDescentOptimizer(learning_rate=0.02).minimize(loss)\n",
    "#optim = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss) # alternative, but not much benefit here\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "rJBkiuECoXa2"
   },
   "source": [
    "The code above just initializes the evaluation of the loss, we still didn't do any optimization steps, but we're finally in a good position to get started with this.\n",
    "\n",
    "Despite the simple equation, the convergence is typically very slow. The iterations themselves are fast to compute, but this setup needs a _lot_ of iterations. To keep the runtime in a reasonable range, we only do 10k iterations by default below (`ITERS`). You can increase this value to get better results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "64g5NVHAoXa3",
    "outputId": "b0425572-351c-4877-9d49-a83ae9a91a91"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Step 0, loss: 0.100037\n",
      "Step 1, loss: 0.097836\n",
      "Step 2, loss: 0.096151\n",
      "Step 1000, loss: 0.054487\n",
      "Step 2000, loss: 0.049147\n",
      "Step 3000, loss: 0.045515\n",
      "Step 4000, loss: 0.042890\n",
      "Step 5000, loss: 0.039945\n",
      "Step 6000, loss: 0.037641\n",
      "Step 7000, loss: 0.035227\n",
      "Step 8000, loss: 0.033604\n",
      "Step 9000, loss: 0.031556\n",
      "Step 10000, loss: 0.029434\n",
      "Runtime 101.02s\n"
     ]
    }
   ],
   "source": [
    "session.initialize_variables()\n",
    "\n",
    "import time\n",
    "start = time.time()\n",
    "\n",
    "ITERS = 10000\n",
    "for optim_step in range(ITERS+1):\n",
    "  _, loss_value = session.run([optim, loss])\n",
    "  if optim_step<3 or optim_step%1000==0: \n",
    "        print('Step %d, loss: %f' % (optim_step,loss_value))\n",
    "        #show_state(grid_u)\n",
    "        \n",
    "end = time.time()\n",
    "print(\"Runtime {:.2f}s\".format(end-start))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "5NLrym59oXa4"
   },
   "source": [
    "As the training uses well established building blocks (the dense layers) it should only take around 2 minutes on a typical notebook, and the error should go down significantly (roughly from around 0.2 to ca. 0.03), and the network seems to successfully converge towards a solution.\n",
    "\n",
    "Let's show the reconstruction of the network, by evaluating the network at the centers of a regular grid, so that we can show the solution as an image. Note that this is actually fairly expensive, as we have to run through the whole network with a few thousand weights for all of the $128 \\times 32$ sampling points in the grid.\n",
    "\n",
    "It looks pretty good on first sight: There's been a very noticeable change compared to the random initialization shown above:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 323
    },
    "id": "JXcISF40oXa4",
    "outputId": "afa97e6c-4d63-433a-aa45-fa29c2c7b17e"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1152x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "show_state(session.run(grid_u),\"After Training\") "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "JD-WnU-1oXa5"
   },
   "source": [
    "---\n",
    "\n",
    "## Evaluation\n",
    "\n",
    "Let's compare solution in a bit more detail. Here are the actual sample points used for constraining the solution (at time step 16, $t=1/2$) shown in gray, versus the reconstructed solution in blue:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 332
    },
    "id": "A95iq_2_oXa6",
    "outputId": "59c9373e-b56b-47dd-ed7f-de7830a6c43e"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f8eca2a7a00>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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55xzLGmYqOXn57No0SIABg0axPjx47ntttvCHl9SUkJhYSETJ06M+D0qKyvJycmpbagJk+rrgRgTtZKSkoiSR25uriWPLBG8fsu4ceMoLS2N6/WPP/541qxxa9p9/fXX9OnTh86dO9OjRw+++OILFi1axLBhw3jllVfo2LEjW7Zs4Y033uD444+nU6dOnH/++WzevBmANm3acMstt9CpUydeeumlao8bOXIknTp1orCwkC+++AKAzZs3c/nll1NYWEiHDh345z//CRD2OrVhCcSkvaofDpGO57DBgNkhUCIN/F0ElhGOVxKprKykpKSEs846C4AhQ4bw0EMPsWDBAu655x5+97vf0bFjR0aPHk3//v1ZtGgRP/30E3feeSdvvfUWCxcupKioiPvuu2/XNZs0acLChQvp1atXtcc1bdqUhQsXcvXVV3PPPfcAcMcdd1BQUEBpaSmffPIJp5xyCt99912114mVVWGZtBVuDfLqWDtH9glVIg0sI1ybv4MtW7bQsWNH1qxZQ/v27enduzebN2/m/fff5/zzz9913LZt2/Y6d+7cuXz22WeceOKJAGzfvp3jjz9+1/7+/ftHdNxvfvMbADp37syUKVMAeOutt5g8efKuYxo1asSrr75a7XVi5WsCEZE+wANADjBRVcdU2X8/8CvvZQOguao29PZVAoGvEP9V1bOSErRJCbH0rrISR3YK96WititKBtpAfv75Z0477TTGjx/PZZddRsOGDXe1jYSjqvTu3Zvnn38+5P599tknouPq1asHuAb96mb7rek6sfKtCktEcoDxQF/gKOBCETkq+BhVvVFVO6pqR+AhYErQ7i2BfZY8sktgQGBNySOwTGxBQYEljywWbrngeC0j3KBBAx588EHuvfdeGjRoQNu2bXnppZcA98G9ePHivc7p3r077733HsuWLQPgp59+4quvvor5uGC9e/feY/2RTZs2xXSdSPjZBtIVWKaqy1V1OzAZ6FfN8RcC8U2fJu0ESh41jSYPDAYcOXIkQ4cOteSRxYqLi8nNzd1jW7zH+xx33HF06NCB559/nmeffZbHH3+cY489lqOPPppXXnllr+ObNWvGpEmTuPDCC+nQoQPHH3/8rkbwWI4LNmLECDZt2sQxxxzDsccey+zZs2O6TiR8m85dRM4D+qjqld7rS4BuqnptiGNbA3OBlqpa6W3b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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "u = session.run(grid_u)\n",
    "\n",
    "# solution is imposed at t=1/2 , which is 16 in the array\n",
    "BC_TX = 16 \n",
    "uT = u[0,:,BC_TX,0]\n",
    "\n",
    "fig = plt.figure().gca()\n",
    "fig.plot(np.linspace(-1,1,len(uT)), uT, lw=2, color='blue', label=\"NN\")\n",
    "fig.scatter(x_bc[0:100], u_bc[0:100], color='gray', label=\"Reference\")\n",
    "plt.title(\"Comparison at t=1/2\")\n",
    "plt.xlabel('x'); plt.ylabel('u'); plt.legend()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "dBbSjnJ8oXa6"
   },
   "source": [
    "Not too bad at the sides of the domain (the Dirichlet boundary conditions $u=0$ are fulfilled), but the shock in the center (at $x=0$) is not well represented.\n",
    "\n",
    "Let's check how well the initial state at $t=0$ was reconstructed. That's the most interesting, and toughest part of the problem (the rest basically follows from the model equation and boundary conditions, given the first state).\n",
    "\n",
    "It turns out that the accuracy of the initial state is actually not that good: the blue curve from the PINN is quite far away from the constraints via the reference data (shown in gray)... The solution will get better with larger number of iterations, but it requires a surprisingly large number of iterations for this fairly simple case. \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 332
    },
    "id": "4n5dAMhBoXa7",
    "outputId": "e6c0e4a2-b5d3-476f-f349-f2b1ca75917a"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f8eca1b48e0>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# ground truth solution at t0\n",
    "t0gt = np.asarray( [ [-math.sin(np.pi * x) * 1.] for x in np.linspace(-1,1,N)] )\n",
    "velP0 = u[0,:,0,0]\n",
    "\n",
    "fig = plt.figure().gca()\n",
    "fig.plot(np.linspace(-1,1,len(velP0)), velP0, lw=2, color='blue', label=\"NN\")\n",
    "fig.plot(np.linspace(-1,1,len(t0gt)), t0gt, lw=2, color='gray', label=\"Reference\") \n",
    "plt.title(\"Comparison at t=0\")\n",
    "plt.xlabel('x'); plt.ylabel('u'); plt.legend()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "7m382fpVoXa8"
   },
   "source": [
    "Especially the maximum / minimum at $x=\\pm 1/2$ are far off, and the boundaries at $x=\\pm 1$ are not fulfilled: the solution is not at zero.\n",
    "\n",
    "We have the forward simulator for this simulation, so we can use the $t=0$ solution of the network to \n",
    "evaluate how well the temporal evaluation was reconstructed. This measures how well the temporal evolution of the model equation was captured via the soft constraints of the PINN loss.\n",
    "\n",
    "The graph below shows the initial state in blue, and two evolved states at $t=8/32$ and $t=15/32$. Note that this is all from the simulated version, we'll show the learned version next. \n",
    "\n",
    "(Note: The code segments below also have some optional code to show the states at `[STEPS//4]`. It's commented out by default, you can uncomment or add additional ones to visualize more of the time evolution if you like.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 348
    },
    "id": "v9uHDCL0oXa8",
    "outputId": "a52cca99-fc5b-44de-aadb-e66c02ea3388"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1, 128, 1)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f8eca556820>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# re-simulate with phiflow from solution at t=0\n",
    "DT = 1./32.\n",
    "STEPS = 32-BC_TX # depends on where BCs were imposed\n",
    "INITIAL = u[...,BC_TX:(BC_TX+1),0] # np.reshape(u0, [1,len(u0),1]) \n",
    "print(INITIAL.shape)\n",
    "\n",
    "DOMAIN = Domain([N], boundaries=PERIODIC, box=box[-1:1])\n",
    "state = [BurgersVelocity(DOMAIN, velocity=INITIAL, viscosity=0.01/np.pi)]\n",
    "physics = Burgers()\n",
    "\n",
    "for i in range(STEPS):\n",
    "    state.append( physics.step(state[-1],dt=DT) )\n",
    "\n",
    "# we only need \"velocity.data\" from each phiflow state\n",
    "vel_resim = [x.velocity.data for x in state]\n",
    "\n",
    "fig = plt.figure().gca()\n",
    "pltx = np.linspace(-1,1,len(vel_resim[0].flatten()))\n",
    "fig.plot(pltx, vel_resim[ 0].flatten(),       lw=2, color='blue',  label=\"t=0\")\n",
    "#fig.plot(pltx, vel_resim[STEPS//4].flatten(), lw=2, color='green', label=\"t=0.125\")\n",
    "fig.plot(pltx, vel_resim[STEPS//2].flatten(), lw=2, color='cyan',  label=\"t=0.25\")\n",
    "fig.plot(pltx, vel_resim[STEPS-1].flatten(),  lw=2, color='purple',label=\"t=0.5\")\n",
    "#fig.plot(pltx, t0gt, lw=2, color='gray', label=\"t=0 Reference\") # optionally show GT, compare to blue\n",
    "plt.title(\"Resimulated u from solution at t=0\")\n",
    "plt.xlabel('x'); plt.ylabel('u'); plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "71n_TaJkoXa9"
   },
   "source": [
    "And here is the PINN output from `u` at the same time steps:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 348
    },
    "id": "tetNobgfoXa9",
    "outputId": "c385a596-c24d-4164-8b4b-8d39014bf5ce"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(128,)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f8ec93a4310>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "velP = [u[0,:,x,0] for x in range(33)]\n",
    "print(velP[0].shape)\n",
    "\n",
    "fig = plt.figure().gca()\n",
    "fig.plot(pltx, velP[BC_TX+ 0].flatten(),       lw=2, color='blue',  label=\"t=0\")\n",
    "#fig.plot(pltx, velP[BC_TX+STEPS//4].flatten(), lw=2, color='green', label=\"t=0.125\")\n",
    "fig.plot(pltx, velP[BC_TX+STEPS//2].flatten(), lw=2, color='cyan',  label=\"t=0.25\")\n",
    "fig.plot(pltx, velP[BC_TX+STEPS-1].flatten(),  lw=2, color='purple',label=\"t=0.5\")\n",
    "plt.title(\"NN Output\")\n",
    "plt.xlabel('x'); plt.ylabel('u'); plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "qx6rOskWoXa-"
   },
   "source": [
    "Judging via eyeball norm, these two versions of $u$ look quite similar, but not surprisingly the errors grow over time and there are significant differences. Especially the steepening of the solution near the shock at $x=0$ is not \"captured\" well. It's a bit difficult to see in these two graphs, though, let's quantify the error and show the actual difference:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 348
    },
    "id": "lWP_Rf2aoXa_",
    "outputId": "e6bb27b6-9020-44d1-f499-e1a8547b11cf"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mean absolute error for re-simulation across 16 steps: 0.01136\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f8eaa76ed90>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "error = np.sum( np.abs( np.asarray(vel_resim[0:16]).flatten() - np.asarray(velP[BC_TX:BC_TX+STEPS]).flatten() )) / (STEPS*N)\n",
    "print(\"Mean absolute error for re-simulation across {} steps: {:7.5f}\".format(STEPS,error))\n",
    "\n",
    "fig = plt.figure().gca()\n",
    "fig.plot(pltx, (vel_resim[0       ].flatten()-velP[BC_TX         ].flatten()), lw=2, color='blue',  label=\"t=5\")\n",
    "fig.plot(pltx, (vel_resim[STEPS//4].flatten()-velP[BC_TX+STEPS//4].flatten()), lw=2, color='green', label=\"t=0.625\")\n",
    "fig.plot(pltx, (vel_resim[STEPS//2].flatten()-velP[BC_TX+STEPS//2].flatten()), lw=2, color='cyan',  label=\"t=0.75\")\n",
    "fig.plot(pltx, (vel_resim[STEPS-1 ].flatten()-velP[BC_TX+STEPS-1 ].flatten()), lw=2, color='purple',label=\"t=1\")\n",
    "plt.title(\"u Error\")\n",
    "plt.xlabel('x'); plt.ylabel('MAE'); plt.legend()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "XDI_7eK8oXbA"
   },
   "source": [
    "The code above will compute a mean absolute error of ca. $1.5 \\cdot 10^{-2}$ between ground truth re-simulation and the PINN evolution, which is significant for the value range of the simulation.\n",
    "\n",
    "And for comparison with the forward simulation and following cases, here are also all steps over time with a color map."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 370
    },
    "id": "2Trf5FSOoXbB",
    "outputId": "ec10bceb-fca2-4e96-d66d-609feed5e913",
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1152x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# show re-simulated solution again as full image over time\n",
    "sn = np.concatenate(vel_resim, axis=-1)\n",
    "sn = np.reshape(sn, list(sn.shape)+[1] ) # print(sn.shape)\n",
    "show_state(sn,\"Re-simulated u\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "EKQ8qe4FoXbC"
   },
   "source": [
    "Next, we'll store the full solution over the course of the $t=0 \\dots 1$ time interval, so that we can compare it later on to the full solution from a regular forward solve and compare it to the differential physics solution.\n",
    "\n",
    "Thus, stay tuned for the full evaluation and the comparison. This will follow in {doc}`diffphys-code-burgers`, after we've discussed the details of how to run the differential physics optimization."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "BY0ltx8uoXbC",
    "outputId": "f4a0333b-0250-40bf-fd9d-e65c35f3e1ac"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Vels array shape: (128, 33)\n"
     ]
    }
   ],
   "source": [
    "vels = session.run(grid_u) # special for showing NN results, run through TF \n",
    "vels = np.reshape( vels, [vels.shape[1],vels.shape[2]] )\n",
    "\n",
    "# save for comparison with other methods\n",
    "import os; os.makedirs(\"./temp\",exist_ok=True)\n",
    "np.savez_compressed(\"./temp/burgers-pinn-solution.npz\",vels) ; print(\"Vels array shape: \"+format(vels.shape))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "50WLIo4voXbD"
   },
   "source": [
    "---\n",
    "\n",
    "## Next steps\n",
    "\n",
    "This setup is just a starting point for PINNs and physical soft-constraints, of course. The parameters of the setup were chosen to run relatively quickly. As we'll show in the next sections, the behavior of such an inverse solve can be improved substantially by a tighter integration of solver and learning. \n",
    "\n",
    "The solution of the PINN setup above can also directly be improved, however. E.g., try to:\n",
    "\n",
    "* Adjust parameters of the training to further decrease the error without making the solution diverge.\n",
    "* Adapt the NN architecture for further improvements (keep track of the weight count, though).\n",
    "* Activate a different optimizer, and observe the change in behavior (this typically requires adjusting the learning rate). Note that the more complex optimizers don't necessarily do better in this relatively simple example.\n",
    "* Or modify the setup to make the test case more interesting: e.g., move the boundary conditions to a later point in simulation time, to give the reconstruction a larger time interval to reconstruct."
   ]
  }
 ],
 "metadata": {
  "colab": {
   "name": "physicalloss-code.ipynb",
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
